package com.qf.filters;

import com.qf.feign.CacheService;
import com.qianfeng.smsplatform.common.constants.CacheConstants;
import com.qianfeng.smsplatform.common.constants.RabbitMqConsants;
import com.qianfeng.smsplatform.common.model.Standard_Submit;
import org.checkerframework.checker.units.qual.A;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/*
 * @Data: 2021/7/21 19:00
 * */
@Component
public class RoutingFilter implements FiltersChain {

    private AmqpTemplate amqpTemplate;
    @Autowired
    public void setAmqpTemplate(AmqpTemplate amqpTemplate) {
        this.amqpTemplate = amqpTemplate;
    }

    private CacheService cacheService;
    @Autowired
    public void setCacheService(CacheService cacheService) {
        this.cacheService = cacheService;
    }

    @Override
    public boolean dealSms(Standard_Submit standard_submit) {
//        这个过滤器 是在别的过滤器执行完之后执行得  作用是 用于添加限流 将 信息发送到网关中
//       添加限流
        long max = System.currentTimeMillis();
        cacheService.add2Zent(CacheConstants.CACHE_PREFIX_SMS_LIMIT + standard_submit.getClientID() + standard_submit.getDestMobile(), max + "", max);

//        将信息转发到 对应的网关 和搜索中
//       我们的网关会有很多分别处理 不同的通道信息  所以我们应该知道应该发送哪个网关
//      网关按照我们的约定 会监听XX队列  我们这边唯一需要获取得是 通道的ID
//      通过获取得通道ID 拼接队列名字得字符串  然后发送到指定队列即可
        Object channelid = cacheService.HGet(CacheConstants.CACHE_PREFIX_ROUTER + standard_submit.getClientID(), "channelid");
//      获取扩展号
        String extendnumber = (String) cacheService.HGet(CacheConstants.CACHE_PREFIX_ROUTER + standard_submit.getClientID(), "extendnumber");
        standard_submit.setSrcNumber(extendnumber);
//      向指定网关的呢队列中发送我们的短信内容数据
        amqpTemplate.convertAndSend(RabbitMqConsants.TOPIC_SMS_GATEWAY+channelid,standard_submit);

        return true;
    }
}
